package ig.finanzas.riesgo;

import ig.finanzas.DefinidorCalculoCambioEsperado;
import ig.finanzas.TasaPK;
import ig.util.excepciones.DatoInvalidoExcepcion;
import java.io.Serializable;

/**
 * Especifica los metodos que deben implementar las clases para poder ser consideradas  como factores de riesgo personales para la aplicacion.
 * @author  lfgarcia
 */
public interface FactorRiesgoPersonal extends Serializable {
	
	public static final byte TIPO_FACTORPRECIO = 0;
	public static final byte TIPO_FACTORTASA = 1;
        public static final byte TIPO_FACTORTASA_DESCUENTO = 2;
	
	public static final byte CAMBIOESPERADO_FACTORMATRIZ = 0;
	public static final byte CAMBIOESPERADO_SERIEVALORES = 1;
//        public static final byte CAMBIOESPERADO_FACTORTASA_DESCUENTO = 2;
	

	/**
	 * Devuelve el tipo de factor definido. Las posibles opciones son: factor de precios
	 * y factor de tasas.
	 * @return
	 */
	public abstract byte getTipo();
	
	public abstract void setTipo(TasaPK tasaPK);

	/**
	 * @uml.property  name="factorRiesgoMatrizCorrelacion"
	 * @uml.associationEnd  
	 */
	public abstract FactorRiesgoMatrizCorrelacion getFactorRiesgoMatrizCorrelacion();
	
	/**
	 * @param factorRiesgoMatrizCorrelacion  The factorRiesgoMatrizCorrelacion to set.
	 * @uml.property  name="factorRiesgoMatrizCorrelacion"
	 */
	public abstract void setFactorRiesgoMatrizCorrelacion(FactorRiesgoMatrizCorrelacion factor) throws DatoInvalidoExcepcion;
	
	/**
	 * Devuelve de donde debe extraerse el valor del cambio esperado. Las posibles opciones
	 * son: realizar los calculos sobre la serie de valores historicos registrados y la 
	 * otra utilizando el valor registrado para el factor de la matriz asociado.
	 * @return
	 */
	public abstract byte getTipoCalculoCambioEsperado();

	/**
	 * @uml.property  name="tasaPK"
	 * @uml.associationEnd  
	 */
	public abstract TasaPK getTasaPK();

	/**
	 * @uml.property  name="definidorCalculoCambioEsperado"
	 * @uml.associationEnd
	 */
	public abstract DefinidorCalculoCambioEsperado getDefinidorCalculoCambioEsperado();
	
	/**
	 * @param definidorCalculoCambioEsperado  The definidorCalculoCambioEsperado to set.
	 * @uml.property  name="definidorCalculoCambioEsperado"
	 */
	public abstract void setDefinidorCalculoCambioEsperado(DefinidorCalculoCambioEsperado definidor);

}